У меня есть класс Java используется в качестве контейнера, он кодируется иметь JPanel и TabbedPaneКак Инстанцировать Java Класс компонентов Swing несколько раз
У меня есть еще один класс Java, который строит JPanel, содержащий JLabel s и JTextField s, который я хочу добавить в TabbedPane класса контейнера. Я хочу новый экземпляр класса, который добавляет 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, перенося свои навыки сверху вниз на ООП.
Вот мой код:
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);
}
}
Некоторые общие советы: Не используйте нуль-макеты, используйте соответствующие [ менеджеров компоновки] (https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html). И я думаю, что было бы более разумно, если бы «MoreTabs» расширил «JPanel», но, возможно, это только я. Но я не совсем понимаю, почему вы хотите использовать один и тот же экземпляр «MoreTabs» для нескольких вкладок. Почему бы просто не создать несколько экземпляров? (например, если 'MoreTabs' будет расширять' JPanel' нечто вроде 'tabbedPane1.addTab (« title1 », new MoreTabs()); tabbedPane2.addTab (« title2 », new MoreTabs());) –
@LuxxMiner, я не могу благодарю вас за ваши комментарии. И да, я перехожу к менеджерам макетов. Я получаю свою голову вокруг Flow (довольно понятный) и Form (непонятно по спецификациям Col and Row). Опять же, большое спасибо. – EricG