java-JTabbedPane Tab组件的MouseEvent不会通过
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-JTabbedPane Tab组件的MouseEvent不会通过,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2079字,纯文字阅读大概需要3分钟。
内容图文
![java-JTabbedPane Tab组件的MouseEvent不会通过](/upload/InfoBanner/zyjiaocheng/671/fd05417eb1674a83a0dd2888db5d8d5d.jpg)
我有一个带有自定义标签组件的JTabbedPane.该组件包含一个JLabel(用于显示选项卡标题)和一个JButton(一个关闭按钮).当我更改JLabel中的文本时,JLabel停止接收鼠标事件,并且当我直接单击标签时,我无法再选择该选项卡,而是如果单击标签周围,则可以选择该选项卡.有任何想法吗?
一段代码:
class ShellPanelTabComponent extends JPanel implements ActionListener{
private ShellPanel panel;
private JLabel label;
public ShellPanelTabComponent(final ShellPanel panel){
super(new FlowLayout(FlowLayout.LEFT, 0, 0));
this.panel = panel;
setOpaque(false);
label = new JLabel(panel.getTitle());
label.setFocusable(false);
add(label);
label.setBorder(BorderFactory.createEmptyBorder(2,0,0,5));
//now the button
CloseButton closeButton = new CloseButton(panel);
add(closeButton);
closeButton.addActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
panel.getShell().removeShellPanel(panel);
}
/**
* @return the label
*/
public JLabel getLabel() {
return label;
}
}
解决方法:
我不记得在How to Use Tabbed Panes中讨论过的TabComponentsDemo中遇到过这样的问题.您可以将代码与该示例进行比较,以作为参考.
附录:将ButtonTabComponent重构为包含getLabel(),此版本的TabComponentsDemo中的runTest()会添加一个按钮,以表明所需的行为.特别是,每次按下按钮时,将重新绘制选项卡以显示放大的标题.
更新:在pane.remove()之后修改正确的选项卡组件.
public void runTest() {
pane.removeAll();
for (int i = 0; i < tabNumber; i++) {
final int titleIndex = i;
String title = "Tab " + titleIndex;
final JButton button = new JButton("Relabel tab");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int index = pane.indexOfComponent(button);
ButtonTabComponent btc = (ButtonTabComponent)
pane.getTabComponentAt(index);
JLabel label = btc.getLabel();
pane.setTitleAt(index, label.getText() + titleIndex);
label.invalidate();
pane.repaint();
}
});
pane.add(title, button);
initTabComponent(i);
}
tabComponentsItem.setSelected(true);
pane.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT);
scrollLayoutItem.setSelected(false);
this.setPreferredSize(new Dimension(500, 200));
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
内容总结
以上是互联网集市为您收集整理的java-JTabbedPane Tab组件的MouseEvent不会通过全部内容,希望文章能够帮你解决java-JTabbedPane Tab组件的MouseEvent不会通过所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。