Java 自动创建组件到';选定的';JTabbedPane
我已经写了一个代码,如下所示。 在这里,我有一个选项卡式面板,我在其中添加了更多带有“+”(添加制表符)的选项卡,如框架右侧的gChrome。我在框架的左侧有另一个固定面板,由一些按钮组成。 我的问题是: 1。现在,我想使用另一个面板上的按钮操作,将一些组件添加到特定的选项卡式面板(面板1或面板2..)中。我怎样才能做到这一点。之后,我需要将每个选项卡式面板的所有组件列表保存在脚本中。 有什么建议吗 2。如果运行代码,您可以在输出中看到右侧选项卡式面板的尺寸非常窄,可能是用于使用BorderLayout.LINE\u END。如果扩展GUI,面板的大小将保持不变。 我想固定标签面板的窄尺寸,我想标签面板的尺寸也会随着框架的增加而增加 谢谢Java 自动创建组件到';选定的';JTabbedPane,java,swing,user-interface,awt,jtabbedpane,Java,Swing,User Interface,Awt,Jtabbedpane,我已经写了一个代码,如下所示。 在这里,我有一个选项卡式面板,我在其中添加了更多带有“+”(添加制表符)的选项卡,如框架右侧的gChrome。我在框架的左侧有另一个固定面板,由一些按钮组成。 我的问题是: 1。现在,我想使用另一个面板上的按钮操作,将一些组件添加到特定的选项卡式面板(面板1或面板2..)中。我怎样才能做到这一点。之后,我需要将每个选项卡式面板的所有组件列表保存在脚本中。 有什么建议吗 2。如果运行代码,您可以在输出中看到右侧选项卡式面板的尺寸非常窄,可能是用于使用BorderLa
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class TestTabSelection extends JFrame {
public JTabbedPane tab = new JTabbedPane();
public JPanel editPanel = new JPanel();
private JButton MM, CM, AAA, VO;
public TestTabSelection() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JPanel panel1 = new JPanel();
panel1.setSize(600, 550);
JPanel createAll = new JPanel();
createAll.setLayout(new BorderLayout());
createAll.BorderLayout.LINE_END;
tab.addTab("CreateAll", createAll);
tab.addTab("Slice 1", panel1);
tab.addTab("+", new JPanel());
tab.getModel().addChangeListener(new ChangeListener() {
private int lastSelected;
private boolean ignore = false;
@Override
public void stateChanged(ChangeEvent e) {
if (!ignore) {
ignore = true;
try {
int selected = tab.getSelectedIndex();
String title = tab.getTitleAt(selected);
if ("+".equals(title)) {
JPanel pane = CreateSlice();
tab.insertTab("Slice "
+ (tab.getTabCount()), null, pane,
null, lastSelected + selected);
tab.setSelectedComponent(pane);
} else {
lastSelected = selected;
}
} finally {
ignore = false;
}
}
}
});
final JButton btn = new JButton("Add");
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(tab.getTabCount());
}
});
JFrame frame = new JFrame("Testing");
frame.setTitle("Network Slice Creation");
frame.setSize(1000, 700);
frame.setBackground(Color.gray);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createPanel0();
frame.add(editPanel, BorderLayout.LINE_START);
frame.add(tab,BorderLayout.LINE_END);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
private void createPanel0() {
editPanel = new JPanel(null);
editPanel.setPreferredSize(new Dimension(330, 650));
editPanel.setBorder(BorderFactory.createLineBorder(Color.gray));
editPanel.setBorder(BorderFactory
.createTitledBorder("Netowrk Functions"));
// editPanel.setLayout(new BorderLayout());
// FunctionHandler handler = new FunctionHandler();
MM = new JButton("MM");
MM.setBounds(50, 80, 150, 40);
MM.setVisible(true);
// MM.addActionListener(handler);
AAA = new JButton("AAA");
AAA.setBounds(50, 160, 150, 40);
AAA.setVisible(true);
// AAA.addActionListener(handler);
CM = new JButton("CM");
CM.setBounds(50, 240, 150, 40);
CM.setVisible(true);
// CM.addActionListener(handler);
VO = new JButton("VO");
VO.setBounds(50, 320, 150, 40);
VO.setVisible(true);
/* VO.addActionListener(handler); */
editPanel.add(MM);
editPanel.add(AAA);
editPanel.add(CM);
editPanel.add(VO);
}
public JPanel CreateSlice() {
JPanel pane = new JPanel(null);
pane.setPreferredSize(new Dimension(550, 600));
return pane;
}
public static void main(String[] args) {
new TestTabSelection();
}
}
我找到了解决办法,
需要一个全局变量,int index
,
在stateChanged方法中,index=e.getSource().getselectedIndex()代码>
我将每个面板保存在ArrayList(PanelList)中,
然后,将显示任何按钮为所选JTabbedPane创建组件所执行的操作
PanelList.get(index).add(button);
它获取我选择的JTabbedPane并在其中添加组件。您的第二个假设是正确的,您需要使用不同的布局管理器,如果我扩展框架,使右侧面板也随框架一起扩展,布局更好@MadProgrammer@MadProgrammer,你能告诉我第一点的情况吗?我希望了解你的想法。我可以将ChangeListener用于选项卡,但我需要排除“+”选项卡选择,我尝试过,但没有成功。更好的布局正是满足您需要的布局,也许可以尝试使用GridBagLayout
谢谢@MadProgrammer,它可以工作。