gpt4 book ai didi

java - 如何在java中根据屏幕大小均匀地间隔字符串

转载 作者:行者123 更新时间:2023-12-01 09:15:12 24 4
gpt4 key购买 nike

我已经设置了一个类,它从文件中读取输入并将它们放入数组中。每个项目都以 x:y:z 的格式设置,其中 x 在整个过程中是连续的大批。我有代码将数组放入 JList<> 中,然后用 Jscrollpane 显示它。我使用了 Gridbag 布局,并将其设置为可以找到屏幕尺寸的位置,并将容器设置为屏幕的宽度和高度的三分之二。现在我的问题是:有没有办法动态替换数组中每个项目中的“:”以分隔所有三个项目,以便 x 位于最左侧,y 位于中间,z 位于最右侧?这是我的两个公共(public)类(class):

import java.awt.*;        
import java.awt.event.*;
import java.awt.Color;
import java.io.File;
import java.util.Scanner;
import java.util.*;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.*;
import java.util.List;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;


public class QueGui extends Frame implements WindowListener {
//variables
private JList<String> Jquelist;
private Frame mainFrame;
private Label headerLabel;
private Label statusLabel;
private Panel controlPanel;
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
int currentque;
int width = gd.getDisplayMode().getWidth();
int height = gd.getDisplayMode().getHeight();
final static boolean shouldFill = true;


public QueGui() {
mainFrame = new Frame("Java AWT Examples"); //makes frame
mainFrame.setLayout(new GridBagLayout());

//following gets the que list
queinput q = new queinput();
ArrayList<String> quelist = new ArrayList<String>();
quelist=q.quereporter();
//this converts it to a box for display
DefaultListModel<String> DLMquelist = new DefaultListModel<String>();
for( String que : quelist ) {

DLMquelist.addElement(que);
}
Jquelist = new JList<>(DLMquelist);

//this tells me when a que is selected
Jquelist.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
final List<String> selectedValuesList = Jquelist.getSelectedValuesList();
String[] currentque = selectedValuesList.get(0).split(":");
}
}
});
//this publishes the frame
GridBagConstraints pane = new GridBagConstraints();
if (shouldFill) {
//natural height, maximum width
pane.fill = GridBagConstraints.HORIZONTAL;
}
pane.fill = GridBagConstraints.BOTH;
pane.weightx = 1.0;
pane.anchor = GridBagConstraints.PAGE_END;
pane.insets = new Insets((height)/3,0,0,0);
pane.ipady = (height);
mainFrame.add(new JScrollPane(Jquelist), pane);

mainFrame.setBackground(Color.DARK_GRAY);
mainFrame.addWindowListener(this);
mainFrame.setTitle("Que thingy");
mainFrame.setSize(width, height);
mainFrame.setVisible(true);
}

public static void main(String[] args) {

new QueGui();

}




@Override
public void windowClosing(WindowEvent evt) {
System.exit(0); // ends the program
}

//needed for for the compilier
@Override public void windowOpened(WindowEvent evt) { }
@Override public void windowClosed(WindowEvent evt) { }
@Override public void windowIconified(WindowEvent evt) { }
@Override public void windowDeiconified(WindowEvent evt) { }
@Override public void windowActivated(WindowEvent evt) { }
@Override public void windowDeactivated(WindowEvent evt) { }
}

import java.io.File;
import java.util.Scanner;
import java.util.*;
import java.util.Collections;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.SwingUtilities;
public class queinput{

public ArrayList<String> quereporter() {
ArrayList<String> ques = new ArrayList<String>();
try {
Scanner input = new Scanner(System.in);
System.out.print("Enter the file name with extention : ");
File file = new File(input.nextLine());

input = new Scanner(file);
while (input.hasNextLine()) {
String line = input.nextLine();
ques.add(line);
}
input.close();

} catch (Exception ex) {
ex.printStackTrace();
}

return(ques);
}
}

我知道我可能可以自己添加空格,但我希望它可以在其他计算机和我的计算机上运行。抱歉,如果这是一个愚蠢的问题,我已经四处寻找答案,但我可能只是谷歌搜索错误。感谢您的帮助

[编辑]还有人知道如何更改 jscrollpanel 的背景颜色吗?还没有找到有效的答案:(

最佳答案

好的...因为有很多问题,我需要将其放入答案中。

如果您想将数据设置到可配置的列中,请使用 JTable。毕竟……这正是它的设计目的。它甚至有自己的滚动条:)

要更改 JScrollPane 的背景颜色,我相信您需要类似的内容:

jScrollPane1.getViewport().setBackground(Color.RED);
jScrollPane1.getViewport().setOpaque(true);

要使 JTable 表现得像一个列表,您可以执行以下操作:

jTable1.setFocusable(false);
jTable1.setDefaultEditor(Object.class, null);

要将行添加到 JTable,您可以将每行列的所需值放入对象数组中,然后使用一个小的自定义方法将数据添加到 JTable。让我们调用自定义方法 addRowToJTable(),您可以像这样使用它:

// Just tossing in some integer values into the array.
Object[] values = {22,32,42};
addRowToJTable(jTable1, values);

这是我们的自定义方法:

private static void addRowToJTable(JTable theTable, Object[] rowString) {
JTable tbl = (JTable) theTable;
DefaultTableModel model = (DefaultTableModel) tbl.getModel();
model.addRow(rowString);
tbl.updateUI();
}

如果您的数据位于 ArrayList 中并且希望将其添加到 JTable 中,那么您可以执行以下操作(假设 ArrayList 中的每个元素由 3 个冒号分隔的项目组成):

// Example ArrayList...
ArrayList<String> myItems = new ArrayList<>();
myItems.add("10:12:14");
myItems.add("11:13:15");
myItems.add("16:17:18");

for (int i = 0; i < myItems.size(); i++) {
Object[] values = myItems.get(i).split(":");
addRowToJTable(jTable1, values);
}

编辑:使用箭头键导航 JTable 行。

正如您已经注意到的,当您的 JTable 将 setFocusable() 属性设置为 false 时,键盘光标(箭头)键不允许您在表行中上下导航。解决这个问题的最简单方法(在我看来)就是简单地setFocusable()属性设置为false NoBorderTableCellRenderer:

class NoBorderTableCellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
@Override
public Component getTableCellRendererComponent(final JTable table, final Object value,
final boolean isSelected, final boolean hasFocus, final int row, final int col) {
final boolean showFocusedCellBorder = false;
final Component c = super.getTableCellRendererComponent(table, value, isSelected,
showFocusedCellBorder && hasFocus, row, col);
return c;
}
}

现在,而不是:

jTable1.setFocusable(false);
jTable1.setDefaultEditor(Object.class, null);

你会:

jTable1.setColumnSelectionAllowed(false);
jTable1.setRowSelectionAllowed(true);
jTable1.setDefaultRenderer(Object.class, new NoBorderTableCellRenderer());
jTable1.setDefaultEditor(Object.class, null);

关于java - 如何在java中根据屏幕大小均匀地间隔字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40603201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com