在JXTaskPane
Java中Swing的使用有一个标题栏.其中有一个扩展/收缩按钮.我希望能够在标题栏中添加我自己的操作,该标题栏将显示在展开/收缩按钮旁边.
我怎样才能做到这一点?我尝试了很多次,但没有得到预期的结果.我创建了一个新的JButton
并将其位置设置在标题栏坐标上,但它已添加到元素中.
我附上了一个屏幕截图,在标题栏中显示了一个帮助类型操作,以显示我的意思.
对这个有点不明确的问题道歉 - 想不出更好的方法.
我使用JXTaskPane(来自Swing labs扩展API)来显示一些信息.
用户可以"单击"标题以展开面板.JXTaskPane位于容器JPanel中,然后将其添加到我的主应用程序窗口JFrame中.
我希望我的应用程序窗口调整为扩展任务窗格的大小.为此,我向容器JPanel添加了一个组件监听器,它将大小设置为现在扩展的面板.
panel.addComponentListener(new ComponentListener()
{
public void componentResized(ComponentEvent e)
{
Dimension newSize = ((JXTaskPane)e.getSource()).getSize();
reSizeFrame(newSize);
}
}
private void reSizeFrame(Dimension newSize)
{
if ((newSize.height < maxSize.height) && (newSize.width < maxSize.width))
{
containerPanel.setSize(newSize);
appFrame.setSize(containerPanel.getSize());
appFrame.pack();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是在任务窗格扩展时调用componentResized方法,因此调用resizeFrame方法很多次,并且在屏幕上看起来非常糟糕.
如何检测JXTaskpane何时完成大小调整?我想到了两种方法:
将resizeFrame()方法放在SwingUtilities.invokeLate(..)调用中.
放入一个timer resizeFrame调用,所以任何后续调用都不会做任何事情,直到定时器触发.这应该为面板调整大小提供足够的时间.
前进的最佳方式是什么?
此外 - 这是我经过多年服务器端程序后的第一个认真的 Java GUI应用程序.StackOverflow非常有用.那谢谢啦!
我想将蓝色背景颜色更改为taskpanecontainer的白色.我用过下面这行但没有任何影响.
UIManager.put("TaskPaneContainer.background", Color.LIGHT_GRAY);
Run Code Online (Sandbox Code Playgroud)
请给我一些改变bg颜色的想法.
public class NewJFrame2 extends javax.swing.JFrame {
public NewJFrame2() {
initComponents();
setSize(462, 300);
add(doInit());
setBackground(Color.WHITE);
}
private Component doInit() {
JXTaskPaneContainer taskpanecontainer = new JXTaskPaneContainer();
//taskpanecontainer.setLayout(new VerticalLayout(2));
JXTaskPane taskpane1 = new JXTaskPane();
taskpane1.setTitle("First TaskPane");
JXTable table = new JXTable();
DefaultTableModel model = new DefaultTableModel();
model.addColumn("ParameterName");
model.addColumn("ParameterType");
model.addColumn("Operation");
model.addRow(new Object[]{"Request", "String", "Delete"});
model.addRow(new Object[]{"Request", "String", "Delete"});
table.setModel(model);
((JComponent) taskpane1.getContentPane()).setBorder(BorderFactory.createEmptyBorder(0,5,0,5));
taskpane1.add(table);
taskpanecontainer.add(taskpane1);
taskpanecontainer.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
return taskpanecontainer;
}
}
Run Code Online (Sandbox Code Playgroud)
我也在分享图像,所以我已经清除了你的想法..
谢谢
我编写了以下示例代码:
import org.jdesktop.swingx.*;
import javax.swing.*;
import java.awt.*;
public class TaskPaneExample{
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new TaskPaneExample();
}});
}
public TaskPaneExample() {
JFrame frame = new JFrame("TaskPane Example 1");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(doInit(), BorderLayout.CENTER);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
private Component doInit() {
JXTaskPaneContainer taskpanecontainer = new JXTaskPaneContainer();
taskpanecontainer.setLayout(new VerticalLayout(2));
final JXTaskPane taskpane1 = new JXTaskPane(){
public void setCollapsed(boolean w){
super.setCollapsed(w);
}};
taskpane1.setTitle("First TaskPane");
JPanel panel1 = new JPanel();
panel1.setBackground(Color.red);
panel1.setSize(100,100);
taskpane1.add(panel1);
taskpanecontainer.add(taskpane1);
JXTaskPane taskpane2 …
Run Code Online (Sandbox Code Playgroud) 我正在为我的大学项目开发一个软件.我正在使用java来开发我的桌面应用程序.为此,我想添加这样的组件:http://www.mediafire.com/view/?6y1183p8u6phwzg
我想添加一个类似于下面框架左侧的组件.它是一个可调整大小的组件,包含标题和子菜单.我们还可以在Windows XP OS的左侧看到这些组件.我努力开发这个组件,只能制作一个可调整大小的组件,但它不会减少它们之间的空白空间.我将把我的代码放在下面并对我的应用程序进行抽样设计.我会觉得很感激,如果任何人可以给我一个解决方案,使我的组件工作,我希望还是给一个很好的解决方案,使这个component.Thank你了.:)
http://www.mediafire.com/view/?c9b8jwp4c558zae
private void lbl1MousePressed(java.awt.event.MouseEvent evt) {
if (!(jpnTop.getSize().equals(lbl1.getSize()))) {
try {
Thread.sleep(100);
jpnTop.setSize(lbl1.getSize());
} catch (InterruptedException ex) {
}
} else {
try {
Thread.sleep(100);
jpnTop.setSize(169, 162);
} catch (InterruptedException ex) {
}
}
}
private void lbl2MousePressed(java.awt.event.MouseEvent evt) {
if (!(jpnLow.getSize().equals(lbl2.getSize()))) {
try {
Thread.sleep(100);
jpnLow.setSize(lbl2.getSize());
} catch (InterruptedException ex) {
}
} else {
try {
Thread.sleep(100);
jpnLow.setSize(169, 162);
} catch (InterruptedException ex) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ps:由于这个网站的限制,我无法上传我的图片,请您使用上面的medeafire链接看到它们.非常感谢.