将JTextArea添加到TabbedPane

时间:2013-06-04 18:05:07

标签: java swing jpanel jtextarea dimensions

我正在尝试让我的JTextArea显示在llpPanel的所有其他内容下。我的代码如下所示,其中包含我的代码显示的屏幕截图。在代码中,您将看到我已将JTextArea的维度设置为(50,50)。然后在llpPanel中我添加了BorderLayout.PAGE_END。我也试过(而不是PAGE_END)把CENTER和SOUTH。当我放置南方时,它在程序的最底部显示一条白线,但你无法用它做任何事情。

enter image description here

    import java.awt.BorderLayout;
    import java.awt.ComponentOrientation;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.ButtonGroup;
    import javax.swing.JButton;
    import javax.swing.JCheckBox;
    import javax.swing.JComboBox;
    import javax.swing.JDialog;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.JRadioButton;
    import javax.swing.JTabbedPane;
    import javax.swing.JTextArea;
    import javax.swing.JTextField;


    public class TestApplication implements ActionListener {

        public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setSize(1000, 1000);
        frame.setTitle("RBA Test Application");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        JButton initialize = new JButton("Initialize");         
            JButton connect = new JButton("Connect");
        JButton disconnect = new JButton("Disconnect"); 
        JButton shutdown = new JButton("Shut Down");
        JButton portsettings = new JButton("Port Settings");    
        JButton online = new JButton("Go Online");       
        JButton offline = new JButton("Go Offline");         
        JButton status = new JButton("Status"); 
        JButton reboot = new JButton("Reboot");      
        JButton account = new JButton("Account");
        JButton amount = new JButton("Amount");
        JButton reset = new JButton("Reset");
        JButton approvordecl = new JButton("Approve / Decline");

JTextArea logbox = new JTextArea(50, 50);

        JPanel testPanel = new JPanel();
        testPanel.add(button);
        testPanel.add(button2);
        testPanel.add(checkbox2);

        JPanel posPanel = new JPanel();
        posPanel.add(test);
        posPanel.add(testing);
        posPanel.add(checkbox);

        JPanel llpPanel = new JPanel();
        llpPanel.add(online);
        llpPanel.add(offline);
        llpPanel.add(status);
        llpPanel.add(reboot);
        llpPanel.add(account);
        llpPanel.add(amount);
        llpPanel.add(reset);
        llpPanel.add(approvordecl);
        llpPanel.add(logbox, BorderLayout.PAGE_END);

            JPanel buttonPanel = new JPanel();
        buttonPanel.add(initialize);
        buttonPanel.add(connect);
        buttonPanel.add(disconnect);
        buttonPanel.add(shutdown);
        buttonPanel.add(portsettings);
        frame.add(buttonPanel);
        frame.add(buttonPanel, BorderLayout.NORTH);

        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.addTab("LLP", null, llpPanel, "Low Level Protocol");
                tabbedPane.addTab("POS",null, posPanel, "Point Of Sale");
        tabbedPane.addTab("Test", null, testPanel, "Test");

        JPanel tabsPanel = new JPanel(new BorderLayout());
        tabsPanel.add(tabbedPane);
        frame.add(tabsPanel, BorderLayout.CENTER);  

        frame.pack();
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub      
    }
    }

更新后的代码截图如下......

import java.awt.BorderLayout;
import java.awt.ComponentOrientation;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;


public class TestApplication implements ActionListener {

  public static void main(String[] args) {
    final JFrame frame = new JFrame();
    frame.setSize(1000, 1000);
    frame.setTitle("RBA Test Application");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);



    JTextArea logbox = new JTextArea(50, 50);




    JButton initialize = new JButton("Initialize");

    JButton connect = new JButton("Connect");

    JButton disconnect = new JButton("Disconnect");

    JButton shutdown = new JButton("Shut Down");


    JButton portsettings = new JButton("Port Settings");


    JButton online = new JButton("Go Online");

    JButton offline = new JButton("Go Offline");

    JButton status = new JButton("Status");

    JButton reboot = new JButton("Reboot");


    JButton account = new JButton("Account");


    JButton amount = new JButton("Amount");


    JButton reset = new JButton("Reset");


    JButton approvordecl = new JButton("Approve / Decline");

    JButton test = new JButton("Test Button #1");

    JButton testing = new JButton("Test Button #2");

    JRadioButton button = new JRadioButton("Radio Button");

    JRadioButton button2 = new JRadioButton("Radio Button");

    JCheckBox checkbox = new JCheckBox("Check Box");

    JCheckBox checkbox2 = new JCheckBox("Check Box");


    JPanel newButtonPanel = new JPanel();
    newButtonPanel.add(online);
    newButtonPanel.add(offline);
    newButtonPanel.add(status);
    newButtonPanel.add(reboot);
    newButtonPanel.add(account);
    newButtonPanel.add(amount);
    newButtonPanel.add(reset);
    newButtonPanel.add(approvordecl);


    JPanel testPanel = new JPanel();
    testPanel.add(button);
    testPanel.add(button2);
    testPanel.add(checkbox2);

    JPanel posPanel = new JPanel();
    posPanel.add(test);
    posPanel.add(testing);
    posPanel.add(checkbox);

    JPanel llpPanel = new JPanel();
    llpPanel.setLayout(new BorderLayout());
    llpPanel.add(newButtonPanel);
    llpPanel.add(logbox, BorderLayout.PAGE_END);

    JPanel buttonPanel = new JPanel();
    buttonPanel.add(initialize);
    buttonPanel.add(connect);
    buttonPanel.add(disconnect);
    buttonPanel.add(shutdown);
    buttonPanel.add(portsettings);
    frame.add(buttonPanel);
    frame.add(buttonPanel, BorderLayout.NORTH);

    JTabbedPane tabbedPane = new JTabbedPane();
    tabbedPane.addTab("LLP", null, llpPanel, "Low Level Protocol");
    tabbedPane.addTab("POS",null, posPanel, "Point Of Sale");
    tabbedPane.addTab("Test", null, testPanel, "Test");

    JPanel tabsPanel = new JPanel(new BorderLayout());
    tabsPanel.add(tabbedPane);
    frame.add(tabsPanel, BorderLayout.CENTER);


    frame.pack();



}

@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub

}






}

screenshot2

2 个答案:

答案 0 :(得分:2)

默认情况下,

JPanels使用FlowLayout,因此应用BorderLayoutPAGE_END限制条件无效。您需要设置面板​​的布局:

llpPanel.setLayout(new BorderLayout());

然后您将遇到组件在BorderLayout.CENTER位置移位的问题。解决方案是在JPanel上为logbox以外的组件创建另一个llpPanel作为容器。

JPanel newButtonPanel = new JPanel();
newButtonPanel.add(online);
...
llpPanel.add(newButtonPanel);
JScrollPane scrollPane = new JScrollPane(logbox) {
    @Override
    public java.awt.Dimension getPreferredSize() {
        return new Dimension(500, 500);
    };
};
llpPanel.add(scrollPane, BorderLayout.PAGE_END);

使用JScrollPane而非直接将JTextArea添加到容器中。

答案 1 :(得分:1)

设置组件的首选大小属性而不是其大小,并将其添加到BorderLayout.SOUTH。对于BorderLayout布局,容器将尝试使用边缘(北,南,东和西)的首选大小,并相应地调整中心的大小。

一个简短的剪切示例来说明。视图是一个面板,其底部的文本区域为50高。这是通过在BorderLayout.SOUTH添加JTextArea组件并在Dimension(0,50)处设置首选大小属性来完成的。视图的其余部分填充了一个面板。此面板位于BorderLayout.CENTER处,将由布局管理器调整大小。

JPanel view = new JPanel( );
view.setSize( 800, 600 );
view.setLayout( new BorderLayout( ) );

JPanel topArea = new JPanel( );
JTextArea textArea = new JTextArea( );
textArea.setPreferredSize( new Dimension( 0, 50 ) );

view.add( topArea, BorderLayout.CENTER );
view.add( textArea, BorderLayout.SOUTH );