我有一个主要的 gui 类和一个 gui 日志类。gui 日志类扩展了 JPanel 并简单地添加了一个 JTextField,它将用于打印日志语句。我将 JTextfield(在滚动窗格中)添加到面板中
add(scrollPane, BorderLayout.WEST);
Run Code Online (Sandbox Code Playgroud)
然后将此类添加到我的主 gui 类中,该类扩展了 JFrame 并使用了 BorderLayout。面板首先添加到 JSplitPane(使用垂直拆分),然后使用添加 SplitPane
getContentPane().add(splitPane);
Run Code Online (Sandbox Code Playgroud)
我的问题是我希望日志面板中的 JTextfield 位于屏幕的最左侧,但是无论我使用什么 BorderLayout 设置(CENTER、EAST、SOUTH...),它始终保持在中心。
有谁知道我该如何解决这个问题?
您还知道如何在调整拆分窗格的大小时调整 JTExt 区域的大小吗?
谢谢
图片:

左边是我得到的,右边是我想要的。
JScrollPane当用户滚动它时,我需要处理事件。在这里建议使用addAdjustmentListenertoJViewport或 Vertical/HorizontalScrollBar。
有什么区别,我应该选择哪种方法?
我也想用scrollRectToVisible同样的方法JScrollPane,我应该期待AdjustmentListener使用这种方法吗?
另外我想知道是否scrollRectToVisible尝试进行最小滚动以使所需的矩形可见,还是尝试使其在JViewport?
UPD:要求:
1) 有一个 JScrollPane,其中一个 JPanel 有许多 JLabel(ImageIcon),因此其中一些不可见。
2)当网络事件发生时,我需要向用户显示 JLabel 之一(使其可见)。如果 I 最初不可见,则 JScrollPane 应自动滚动。这就是为什么我提到scrollRectToVisible.
3) 在里面有 ImageIcon 的 JLabel 上方,我需要显示一条消息来解释这个元素发生了什么。由于 JLayeredPane 层次结构更高,该消息当前被实现为另一个带有浮点数的 JLabel。现在的问题是,如果用户滚动 JScrollPane,浮动 JLabel 应该相应地移动到相应 JLabel(ImageIcon) 的顶部。
UDP2:SSCCE
我还没有实现浮动 JLabel,但我已经不喜欢索引为 11 的标签的反应,scrollRectToVisible因为它被裁剪了一半。
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList; …Run Code Online (Sandbox Code Playgroud) 每当我添加新列并显示最后 10 行时,我都希望 JTable 自动滚动到底部。但是,我可以选择滚动到我想要的任何地方(鼠标监听器?)。你知道怎么做吗?这是我到目前为止的代码。它构建一个 JTable 并为每次在 JButton 上单击鼠标添加一个新行。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
public class sampleGUI extends JFrame implements ActionListener {
private JButton incrementButton;
private JTable table;
private DefaultTableModel model;
private int count;
private JScrollPane scroll;
public sampleGUI() {
JFrame frame = new JFrame("sample frame");
frame.setLayout(new BorderLayout());
incrementButton = new JButton("Increase the count!");
model = new DefaultTableModel();
model.addColumn("column 1");
table = new JTable(model);
frame.add(incrementButton, BorderLayout.NORTH);
scroll = new …Run Code Online (Sandbox Code Playgroud) 我需要让用户向我的 JFrame 添加更多文本字段,因此一旦框架的大小超过其原始值,滚动窗格就会介入。由于我无法将 JScrollPane 添加到 JFrame 以启用滚动,因此我决定将 JPanel 放在JFrame 并将 JPanel 对象传递给 JScrollPane 构造函数。滚动现在可以正常工作,但只能直到它到达 JPanel 的边界。问题是 JPanel 的大小保持原样,不会动态拉伸。发生的情况是我的代码中的按钮用完了 300x300 大小的 JPanel 的所有空间,但我想要做的是在这些控件用完其原始空间后让 JPanel 拉伸。请指教。
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Rectangle;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
public class Skrol {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setLayout(new FlowLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel p = new JPanel();
p.setPreferredSize(new Dimension(400,400));
JScrollPane jsp = new JScrollPane(p);
jsp.setPreferredSize(new Dimension(300,300));
jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
for(int i=0;i<100;i++) …Run Code Online (Sandbox Code Playgroud) 我有一个滚动窗格,我想在其中添加多个 jlabel。在 jTextField1 中,用户输入 1-10 之间的 no(这里的 no. 表示必须添加多少 jlabel),相应地 jlabel 将添加到滚动窗格中。
谁能告诉我我该怎么做。
int x=jTextField1.getText;
JPanel mainpanel = new JPanel();
mainpanel.setLayout(new BoxLayout(mainpanel, BoxLayout.X_AXIS));
this.add(mainpanel);
JPanel rightpanel = new JPanel();
rightpanel.setLayout(new FlowLayout());
for (int i = 0; i < x; i++)
{
rightpanel.add(new JLabel("Label " + i));
}
mainpanel.add(new JLabel("Left label"));
mainpanel.add(new JScrollPane(rightpanel));
Run Code Online (Sandbox Code Playgroud)
此代码不起作用。虽然当我们在另一个 jFrame 中做同样的事情时它正在工作,即
JFrame frame = new JFrame("Labels");
JPanel mainpanel = new JPanel();
mainpanel.setLayout(new BoxLayout(mainpanel, BoxLayout.X_AXIS));
frame.add(mainpanel);
JPanel rightpanel = new JPanel();
rightpanel.setLayout(new FlowLayout());
for (int i = …Run Code Online (Sandbox Code Playgroud) 我有这个代码:
package web.test;
import java.awt.Dimension;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
public class WebTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JEditorPane Window = new JEditorPane();
Window.setEditable(false);
try {
Window.setPage("http://www.sparky.org/safety_tips.html");
} catch (IOException e) {
Window.setContentType("text/html");
Window.setText("<html>Cannot Load Page/html>");
}
JScrollPane ScrollPane = new JScrollPane(Window);
JFrame Frame = new JFrame("Fire Safety Tips");
Frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
Frame.getContentPane().add(ScrollPane);
Frame.setPreferredSize(new Dimension());
Frame.setVisible(true);
Frame.setLocationRelativeTo(null);
}
}
Run Code Online (Sandbox Code Playgroud)
有什么办法可以让这个窗口最大化吗?我尝试将滚动和编辑窗格的大小设置为 setPreferredSize as .getMaximumSize 但这不起作用。
我使用GridBagLayout制作了一个布局,强制子组件从底部向上堆叠.
我唯一剩下的就是让"容器"组件可以滚动.
我尝试在不同的位置插入JScrollPane,但我找不到工作点.
我的2个内部JPanels在底部正确对齐,当我调整窗口大小时它们正确调整大小.但是当我调整窗口的大小以使文本不适合时,我希望"容器"组件滚动.
请帮助新手:)
更新1:滚动应该是整个GridBagLayout.不适用于每个单独的textpane.
更新2:更改代码以使用BorderLayout,因为它对我的滚动问题没有任何影响.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.LineBorder;
public class BorderTest extends JFrame {
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new BorderTest().setVisible(true);
}
});
}
public BorderTest() {
UIManager.put("swing.boldMetal", Boolean.FALSE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Grid Bag");
setSize(500, 300);
setLocationRelativeTo(null);
JPanel container = new JPanel();
container.setLayout(new BorderLayout()); …Run Code Online (Sandbox Code Playgroud) 如图所示,我有两个 JScrollPanes,A 和 B。我想要实现的是,当光标位于 B 上时,滚动鼠标滚轮:
1)如果B有可滚动内容,则滚动B即可。
2)如果B已经滚动到最后,或者B内容很少,无法滚动,则滚动A。
现在发生的情况是,无论如何,鼠标滚轮事件总是被 B 消耗,因此 A 永远无法滚动。有什么建议吗?提前致谢。
我有一个非常基本的jquery问题.我试图将jscrollpane添加到我的网站,并在ajax调用后进行初始化.但是,当我运行该功能时,我一直在控制台中收到"testFunction未定义"的消息.代码非常基本:
$(document).ready(function() {
var api = $('.scroll-pane').jScrollPane({
showArrows:true,
maintainPosition: false
}).data('jsp');
function testFunction() {
api.getContentPane().load('ajax_content.html', function() {
api.reinitialise();
});
}
});
Run Code Online (Sandbox Code Playgroud)
为什么我一直收到消息?如果我从测试功能中取出测试功能,我会提前感谢错误"api not defined"
我有一个带有自定义LayoutManager的JPanel并尝试将其放入JScrollPane中,但是,滚动窗格似乎不知道它应该启用滚动.无论我如何设置组件的首选大小(这就是JScrollPane所说的javadoc所说的),它绝对没有区别.这是代码:
canvas = new JPanel();
JScrollPane scroll = new JScrollPane();
scroll.setViewportView(canvas);
scroll.setPreferredSize(new Dimension(924,700));
canvas.setPreferredSize(new Dimension(2000,2000));
Run Code Online (Sandbox Code Playgroud)
滚动条不会出现.JScrollPane的容器设置为遵循其首选大小.我已经通过调试器检查了画布的首选大小确实是2000 x 2000(LayoutManager确保这一点),那么可能会发生什么呢?
jscrollpane ×10
java ×9
swing ×8
jpanel ×2
ajax ×1
jeditorpane ×1
jframe ×1
jlabel ×1
jquery ×1
jscrollbar ×1
jtable ×1
jtextarea ×1
jviewport ×1