我正在使用NetBeans GUI编辑器创建一个应用程序,其中我想要一个JSplitPane
,其顶部组件将是JScrollPane
中的Canvas
和底部组件将是JTextArea
,或类似的东西。
当我向下拉分隔符,从而增加顶部组件的大小时,所有东西的大小似乎都调整得很好。
当我尝试向上推动分隔符时,问题就出现了:分隔符似乎位于Canvas
下方(也可能位于JScrollPane
下方)。
我尝试了JScrollPane
和Canvas
的首选/最小/最大大小的各种组合,但似乎都不起作用。
这是 Netbeans 生成的代码中可能与手头的问题有关的部分:
jSplitPane1 = new javax.swing.JSplitPane();
jScrollPane1 = new javax.swing.JScrollPane();
canvas1 = new java.awt.Canvas();
jTextField1 = new javax.swing.JTextField();
jSplitPane1.setDividerLocation(300);
jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jScrollPane1.setViewportView(canvas1);
jSplitPane1.setTopComponent(jScrollPane1);
jTextField1.setText("jTextField1");
jSplitPane1.setRightComponent(jTextField1);
因为这是我的第一个问题,我不允许在问题中嵌入图像,所以我只发布链接:
红色箭头表示分隔器的位置。
提前感谢您的时间。
在阅读了davidbuzatto的评论后,我在谷歌上搜索了AWT和Swing组件的混合,我有点惊讶地发现这是一种如此糟糕的做法。
我在这里找到了我问题的最准确答案
重量级组件有自己的Z排序。这就是为什么Swing和AWT不能组合在一个容器中的原因。如果它们是,AWT组件将绘制在Swing组件的TOP上。
例如:当AWT组件与JtabbedPane一起使用时,它们不会在切换选项卡时消失。
感谢davidbuzatto为我指路:-)
正如我在评论中所说,您不应该混合使用AWT和Swing组件。我认为您没有以正确的方式使用组件。看一看,这是一个如何使用JSplitPane的简单示例。
import java.awt.*; // it is necessary to use the Dimension and BorderLayout classes
import javax.swing.*;
public class Foo extends JFrame {
public Foo() {
setTitle( "Splits" );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize( 400, 400 );
JSplitPane split = new JSplitPane( JSplitPane.VERTICAL_SPLIT );
split.setDividerLocation( 200 );
add( split );
JPanel panel1 = new JPanel();
panel1.setLayout( new BorderLayout() );
panel1.add( new JLabel( "top panel" ), BorderLayout.NORTH );
JPanel myDrawPanel = new JPanel();
myDrawPanel.setPreferredSize( new Dimension( 100, 100 ) );
myDrawPanel.add( new JLabel( "draw panel here!" ) );
panel1.add( new JScrollPane( myDrawPanel ), BorderLayout.CENTER );
split.setTopComponent( panel1 );
JPanel panel2 = new JPanel();
panel2.add( new JLabel( "bottom panel" ) );
split.setBottomComponent( panel2 );
setVisible( true );
}
public static void main( String[] args ) {
new Foo();
}
}
代替setPreferredSize()
,让您的组件计算它们自己的首选大小并pack()
封装Window
以适应。下面的示例在顶部添加了draw.GraphPanel
的实例,在底部添加了相应的控制面板。
import draw.GraphPanel;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
/**
* @see https://stackoverflow.com/q/11942961/230513
*/
public class SplitGraph extends JPanel {
public SplitGraph() {
super(new GridLayout());
JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
GraphPanel graphPanel = new GraphPanel();
split.setTopComponent(new JScrollPane(graphPanel));
split.setBottomComponent(graphPanel.getControlPanel());
this.add(split);
}
private void display() {
JFrame f = new JFrame("SplitGraph");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new SplitGraph().display();
}
});
}
}
我有一个问题已经部分解决了,但我很好奇另一个(更好的)解决方法…我想要一个画布,什么填充整个窗口,并调整自己的大小,如果窗口的大小。 根据这个:https://dlemmermann.wordpress.com/2014/04/10/javafx-tip-1-resizable-canvas/和这个:如何在JavaFX中使canvas可调整大小?我已创建(复制)类: 并将以下内容放入viewfie
在javaFX中,调整画布大小没有这样的方法,唯一的解决方案是从画布扩展。 “从画布扩展”是使画布可调整大小的唯一解决方案吗?因为这个解决方案只有在我们不想使用FXML的情况下才起作用,如果我们在FXML中声明一个画布,我们如何使它可以调整大小? 这是我的代码:
一直以来,我都在开发一款分辨率为800x480(流行手机分辨率)的应用程序。 我的画布HTML: 现在,为了使其全屏显示其他分辨率,我在调整大小事件后执行以下操作: 这是可行的,但问题是我不能以这种方式保持纵横比。800x480是4:3,但是如果我在5:3的手机上运行这个应用程序,有些东西(尤其是圆圈)看起来会被拉伸。 有没有什么方法可以让它在所有分辨率下看起来都很好,而不必为每个纵横比创建一组独
本文档概述了您可以用来调整图像的裁剪、旋转和画布大小的各种方法。 使用裁剪命令裁剪图像 使用选区工具来选择要保留的图像部分。 选取“图像”>“裁剪”。 使用裁切命令裁剪图像 “裁切”命令通过移去不需要的图像数据来裁剪图像,其所用的方式与“裁剪”命令所用的方式不同。可以通过裁切周围的透明像素或指定颜色的背景像素来裁剪图像。 选取“图像”>“裁切”。 在“裁切”对话框中选择选项: “透明像素”修整掉图
问题内容: 我正在尝试使用javascript和canvas元素在客户端创建缩略图,但是当我缩小图像时,它看起来很糟糕。看起来好像是在Photoshop中缩小了尺寸,将重采样设置为“最近的邻居”而不是Bicubic。我知道有可能使它看起来正确,因为该站点也可以使用画布来完成它。我已经尝试使用与[[Source]]链接中所示相同的代码,但是看起来仍然很糟糕。是否缺少我需要的设置,需要设置的设置? 编
我想减少GridBagLayout中JTextField和JScrollPane的宽度和高度,但似乎通过设置文本字段列,宽度只能减少到JList中最长内容的长度。我不确定是否需要调整组件的两个或一个尺寸以匹配宽度。 我尝试了setPreferredSize()、setSize()和在文本字段上设置列长度,但它们似乎没有任何作用。