我试图阻止我的JTable重新调整大小,使标题小于他们持有的文本的大小.我遇到的问题是,我得到的每个标头组件的最小首选宽度只有10,当每个标头组件中的值是"标头1","标头2","标头3"等时,这显然太小了上.
我花了很多时间搜索SO并尝试实现各种建议,但尚未设法遇到解决方案.请查看我正在使用的当前代码作为扩展JTable的一部分:
public class MyTable extends JTable {
private Map<Integer, Integer> minSizeMap;
public void calculateMinColumnSizes() {
int width = 0;
int row = 0;
minSizeMap = new HashMap<Integer, Integer>();
for (int column = 0; column < columnModel.getColumnCount(); column++) {
TableColumn tableColumn = columnModel.getColumn(column);
TableCellRenderer renderer = tableColumn.getCellRenderer();
Component comp = this.prepareRenderer(renderer, row, column);
width = Math.max(comp.getPreferredSize().width, width);
minSizeMap.put(tableColumn.getModelIndex(), width);
}
}
}
Run Code Online (Sandbox Code Playgroud)
原始代码来自kleopatra对如何将JTable列调整为字符串长度的答案?,但是我已经更改了部件,因为我只想获得每个列标题的最小首选宽度,并在调整大小后存储它以供以后比较.
在调用方法之前已经设置了所有模型,所以当TableColumn的minWidth和preferredWidth默认值分别为15和75时,我对组件首选宽度的得分感到有点困惑.
关于我做了什么/理解错误的任何想法?
我有2张桌子'A'和'B'.两者都有一个共同的列'name',并通过列'id'相互链接.表A中的列'name'是空的,而它有表B中的数据.我的任务是将表B中该列中的所有数据填充到具有相应ID的表A.
我正在使用以下查询:
UPDATE A
SET A.name = (SELECT B.name from B WHERE A.id = B.id)
WHERE EXISTS
(SELECT B.name from B)
Run Code Online (Sandbox Code Playgroud)
一旦我在SQL开发人员中运行查询,它就会冻结,我必须强行关闭它.谁能告诉我查询有什么问题?
我想以不同的形式为我的jtables实现一个通用验证类来检查qty列,因为不同形式的不同表中的qty列No是不同的.为此,我希望在C#或VB中按列名称获取列值.
我的要求如下.
int qty=jtable.getValueAt(rowNo,"columnName");
Run Code Online (Sandbox Code Playgroud)
现在我正在使用
int qty=jtable.getValueAt(rowNo,colNo);
Run Code Online (Sandbox Code Playgroud)
有没有办法按列名称或JTable标题查找列#?
我正在使用JavaFx 2.2.我遇到的问题是我无法在TableView列中放置不同的组件.例如,我有两列
1)答案
2)AnswerType
如果AnswerType包含"Multiple Choice",则Answer Column中的相应单元格应显示ComboBox,否则它应显示TextField.
我在下面有一个代码示例,但它显示的是ComboBox或TextField,但不能同时显示同一列的不同单元格.
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Callback;
import javafx.scene.control.cell.ComboBoxTableCell;
public class TableCellWithMultipleComponent extends Application {
@SuppressWarnings("rawtypes")
TableColumn answerTypeCol;
@SuppressWarnings("rawtypes")
TableColumn answerCol;
ObservableList<String> namesChoiceList;
public static void main(String[] args) {
launch(args);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void start(final Stage primaryStage) {
primaryStage.setTitle("Table Cell With Multiple Components");
TableView<Person> table …Run Code Online (Sandbox Code Playgroud) 我写了一个代码:
<p:column headerText="Edit" width="40" rendered="#{(leaveDetails.strLeaveStatus == 'Canceled') or (leaveDetails.strLeaveStatus == 'Availed')}">
<p:commandLink actionListener="#{userLeaveBean.editAppliedLeave}" title="Edit" disabled="true" process="@this" update="leaveDataTable" immediate="false">
<h:graphicImage url="resources/images/edit.JPG"/>
<f:attribute name="userId" value="#{employee.name}"/>
<f:attribute name="editFirstHalf" value="#{leaveDetails.strStartTiming}"/>
<f:attribute name="editSecondHalf" value="#{leaveDetails.strEndTiming}"/>
<f:attribute name="editFrom" value="#{leaveDetails.dtLeaveFromDate}"/>
<f:attribute name="editTo" value="#{leaveDetails.dtLeaveToDate}"/>
<f:attribute name="leaveId" value="#{leaveDetails.strLeaveId}"/>
</p:commandLink>
</p:column>
Run Code Online (Sandbox Code Playgroud)
但渲染的属性不适用于该条件.如何使用逻辑运算符使条件有效?使用PrimeFaces 3.4.2
我正在使用SlickGrid,并努力寻找以下优雅的解决方案:
我见过:
在调整浏览器窗口大小时,
使一个列填充SlickGrid中的剩余空间而不会弄乱显式宽度列调整网格大小
如何在SlickGrid中自动调整列的大小?
但这些似乎并没有完全符合我的需要.如果我使用forceFitColumns选项,那么所有列都将自动调整大小(除非我对它们放置了maxsize).在window.resize上使用resizeCanvas效果很好 - 但它仍然只有在forceFitColumns为true时才有效.
如果我设置minWidth=maxWidth- 那么我无法调整列的大小.
有什么建议?
我有一个JTable显示双倍的多列,其中一些是比率,其他列是美元值.我想指定一个TableCellRenderer用于比率,另一个用于美元值.
java教程说"要指定特定列中的单元格应该使用渲染器,您可以使用该TableColumn方法setCellRenderer".这很有帮助,但我不清楚我应该在什么时候将这种方法称为我TableColumn的方法.有这样做的标准方法吗?我应该JTable在其构造函数中创建一个自定义的自定义吗?还是习俗TableColumnModel?理想情况下,我希望能够从TableModel我已有的自定义中做到这一点,尽管这似乎不太可能.
任何帮助,将不胜感激.谢谢
我有一个大问题。
我尝试将 TableColumn 的内容居中放置在 TableView 中。
我已经尝试了我在网上找到的所有东西,但实际上没有任何效果!
有没有人遇到/有同样的问题?任何解决方案?
希望得到帮助!
编辑:
好吧,我能够使用以下代码将静态单元格的内容居中:
tc_customer.setCellFactory(new Callback<TableColumn<TvAccounting, String>, TableCell<TvAccounting, String>>() {
@Override
public TableCell<TvAccounting, String> call(TableColumn<TvAccounting, String> p) {
TableCell<TvAccounting, String> tc = new TableCell<TvAccounting, String>();
tc.setAlignment(Pos.CENTER);
tc.setText("SOMETEXT");
return tc;
}
});
Run Code Online (Sandbox Code Playgroud)
但是内容应该来自数据库,我真的不知道如何从我在TABLEVIEWNAME.setItems方法中使用的 ObservableList 对象中获取数据......
我第一次使用这个代码:
tc_customer.setCellValueFactory(new PropertyValueFactory<TvAccounting, String>("Customer"));
Run Code Online (Sandbox Code Playgroud)
但是没有办法让这些内容居中!
请问有人可以帮我吗?
编辑:
感谢这个伟大的答案,我做到了!
代码如下:
tc_customer.setCellFactory(new Callback<TableColumn<TvAccounting, String>, TableCell<TvAccounting, String>>() {
@Override
public TableCell<TvAccounting, String> call(TableColumn<TvAccounting, String> p) {
TableCell<TvAccounting, String> tc = new TableCell<TvAccounting, String>(){
@Override
public void updateItem(String item, boolean empty) …Run Code Online (Sandbox Code Playgroud) 这些是我的表格栏目 课程和说明.如果单击一行(该行变为"活动"/突出显示),并按下" 删除"按钮,则应该删除该行,我该怎么做?
我的课程列的代码:(以及我添加到删除按钮的事件监听器?)
@SuppressWarnings("rawtypes")
TableColumn courseCol = new TableColumn("Course");
courseCol.setMinWidth(300);
courseCol.setCellValueFactory(new PropertyValueFactory<Courses, String>("firstName"));
final Button deleteButton = new Button("Delete");
deleteButton.setOnAction(.....
Run Code Online (Sandbox Code Playgroud) 我有一个TableView,并且按如下方式访问列表对象的属性。这样很好。
<TableColumn fx:id="dateColumn" editable="false" prefWidth="135.0" text="Date">
<cellValueFactory>
<PropertyValueFactory property="date" />
</cellValueFactory>
</TableColumn>
Run Code Online (Sandbox Code Playgroud)
但是,我想访问对象的嵌套属性,例如:
<TableColumn prefWidth="100.0" text="Course">
<cellValueFactory>
<PropertyValueFactory property="house.bathroom"/>
</cellValueFactory>
</TableColumn>
Run Code Online (Sandbox Code Playgroud)
我的列表对象有一个getHouse(),而House有一个getBathroom()。不幸的是,这不起作用。我尝试了一些拼写变化,但没有运气。
tablecolumn ×10
java ×5
javafx ×4
jtable ×3
swing ×3
autosize ×1
center ×1
datatable ×1
header ×1
javafx-2 ×1
jsf ×1
oracle ×1
oracle10g ×1
primefaces ×1
properties ×1
slickgrid ×1
sql ×1
sql-update ×1
tablecell ×1
tableview ×1