【发布时间】:2016-02-14 17:54:13
【问题描述】:
我有一个 java 类被用作容器,它被编码为有一个 JPanel 和一个 TabbedPane
我有另一个 java 类,它构建了一个 JPanel,其中包含我想要添加到容器类的 TabbedPane 中的 JLabel 和 JTextField .我想要一个添加 JPanel 的类的新实例,因此我可以向容器类添加多个选项卡。
我查看了以下内容:Can we reuse Java Swing application components in other instances of same application?、Multiple instances of model components in Java Swing?、Multiple instance of ONE JFrame 和多个网络作者。我不是做作业的学生,我是一个老伙计,刚接触 Java,将我的自上而下的技能转移到 OOP。
这是我的代码:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.border.EmptyBorder;
@SuppressWarnings("serial")
public class TestContainer extends JFrame {
private JPanel contentPane;
public static JTabbedPane tabbedPane1;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
TestContainer frame = new TestContainer();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public TestContainer() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JScrollPane scrollBasePane = new JScrollPane();
scrollBasePane.setBounds(10, 11, 414, 239);
contentPane.add(scrollBasePane);
JPanel panelBase = new JPanel();
scrollBasePane.setViewportView(panelBase);
panelBase.setLayout(null);
tabbedPane1 = new JTabbedPane(JTabbedPane.TOP);
tabbedPane1.setBounds(10, 11, 392, 215);
panelBase.add(tabbedPane1);
// add new JPanel to TabbedPane via a reusable Class
MoreTabs mt1 = new MoreTabs();
tabbedPane1.addTab( mt1() ); //non-static
}
}
和
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class MoreTabs{
private JPanel panel = new JPanel();
private JLabel lblPutStuffOn = new JLabel("Put stuff on this panel, T3-MoreTabs.");
private JTextField text = new JTextField();
panel.add(lblPutStuffOn);
panel.add(text);
public String getLblText() {
String lblText;
lblText = lblPutStuffOn.getText();
return lblText;
}
public void setLblText(String s){
lblPutStuffOn.setText(s);
}
public String getTxtText() {
String txtText;
txtText = text.getText();
return txtText;
}
public void setTxtText(String s){
text.setText(s);
}
}
【问题讨论】:
-
一些一般性建议:不要使用空布局,而是使用正确的layout managers。我认为如果
MoreTabs扩展JPanel会更有意义,但也许这只是我。但我不太明白为什么要对多个选项卡使用MoreTabs的相同实例。为什么不只创建多个实例? (例如,如果MoreTabs将扩展JPanel类似于tabbedPane1.addTab("title1", new MoreTabs()); tabbedPane2.addTab("title2", new MoreTabs());) -
@LuxxMiner,我非常感谢您的现场 cmets。是的,我正在转向布局管理器。我对 Flow(很容易理解)和 Form(在 Col 和 Row 规范上不清楚)有所了解。再次,非常感谢。
标签: java swing multiple-instances